package com.javabase.study.OOPFistPart;

/**
 * TODO
 * 内容：
 * 作者:jxx
 * 创建时间：2021/6/21
 */

interface Callback1{

    /**
     * 小高知道答案后告诉小刘时需要调用的方法，即回调方法
     * @param result 问题的答案
     */
    public void answer(String result);
}


/**
 * 小刘类：实现了回调接口(背景1）
 */
class Liu1 implements Callback{

    /**
     * 包含小高对象的引用（背景2）
     */
    private Gao1 gao1;
    class Gao1{
        /**
         * 相当于class B有一个参数为callback的方法C
         * @param callback
         * @param question
         */
        public void execute(Callback callback,String question){
            System.out.println("小刘的问题是： " + question);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e){
                e.printStackTrace();
            }

            String result = "学java当然要去尚学堂";
            callback.answer(result);
        }
    }

    public Liu1(){

    }

    public Liu1(Gao1 gao1){
        this.gao1 = gao1;
    }

    /**
     * 小刘通过这个方法问小高
     * @param question 小刘问的问题“学习Java选那家机构呢？”
     */
    public void askQuestion(String question){
        gao1.execute(Liu1.this,question);
    }

    /**
     * 实现接口的方法
     * 小高知道答案后通过此方法告诉小刘
     * @param result 问题的答案
     */
    @Override
    public void answer(String result) {
        System.out.println("小高告诉小刘的答案是：" + result);
    }
}


public class CallbackByInnerClass {
    public static void main(String[] args){

        Liu1.Gao1 gao1 = new Liu1().new Gao1();
        new Liu1(gao1).askQuestion("Java学习去那家比较好？");
    }

}
